package com.run2code.design.structural.flyweight;

import java.util.HashMap;
import java.util.Map;

/**
 * 享元工厂
 * 他比一般的工厂多了一个缓存，当需要一个产品时，先在缓存中查找，如果存在，则直接返回，如果不存在，则创建一个新的
 *
 * 关注公众号【奔跑的码畜】，一起进步不迷路
 *
 * @author 第七人格
 * @date 2023/12/18
 */
public class ProductFactory {
    private static final Map<String, Product> PRODUCTS = new HashMap<>();

    /**
     * 在这个示例中，我们使用了一个静态的HashMap来存储共享的商品对象。
     * 当需要获取一个商品对象时，首先检查HashMap中是否已经存在该对象，如果不存在，则创建一个新的商品对象并将其添加到HashMap中；
     * 如果已经存在，则直接返回该对象。这样可以避免频繁地创建和销毁商品对象，从而提高查询性能。
     *
     * @param id id
     * @param name name
     * @return {@link Product}
     */
    public static Product createProduct(String id, String name) {
        String key = id + "-" + name;
        if (!PRODUCTS.containsKey(key)) {
            PRODUCTS.put(key, new Product(id, name));
        }
        return PRODUCTS.get(key);
    }

}
